package com.hmall.common.config;

import com.hmall.common.proxy.MessageConverterProxy;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author xiaopeng
 * @version 1.0
 */
@Configuration
@ConditionalOnClass(RabbitTemplate.class) // 当RabbitTemplate类存在时，即有引入mq，才加载配置类
public class MessageConvertConfig {
    /**
     * JSON消息转换器配置
     */
/*    @Bean
    public MessageConverter messageConverter() {
        // 1.定义消息转换器
        Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();
        // 2.配置自动创建消息id，用于识别不同消息，也可以在业务中基于ID判断是否是重复消息
        jackson2JsonMessageConverter.setCreateMessageIds(true);
        return jackson2JsonMessageConverter;
    }*/

    /**
     * 使用MessageConverterProxy代理类增强目标类
     * JSON消息转换器配置
     */
    @Bean
    public MessageConverter messageConverter() {
         // 创建 Jackson2JsonMessageConverter 作为目标类
        Jackson2JsonMessageConverter targetConverter = new Jackson2JsonMessageConverter();
        // 2.配置自动创建消息id，用于识别不同消息，也可以在业务中基于ID判断是否是重复消息
        targetConverter.setCreateMessageIds(true);

        // 使用代理类增强目标类
        return new MessageConverterProxy(targetConverter);
    }
}
